home *** CD-ROM | disk | FTP | other *** search
- package sun.audio;
-
- import com.sun.media.sound.DataPusher;
- import com.sun.media.sound.Toolkit;
- import java.io.BufferedInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.Hashtable;
- import java.util.Vector;
- import javax.sound.midi.InvalidMidiDataException;
- import javax.sound.midi.MidiFileFormat;
- import javax.sound.midi.MidiSystem;
- import javax.sound.midi.MidiUnavailableException;
- import javax.sound.midi.Sequencer;
- import javax.sound.sampled.AudioFormat;
- import javax.sound.sampled.AudioInputStream;
- import javax.sound.sampled.AudioSystem;
- import javax.sound.sampled.DataLine;
- import javax.sound.sampled.LineUnavailableException;
- import javax.sound.sampled.Mixer;
- import javax.sound.sampled.SourceDataLine;
- import javax.sound.sampled.UnsupportedAudioFileException;
- import javax.sound.sampled.AudioFormat.Encoding;
-
- public class AudioDevice {
- private boolean DEBUG = false;
- private Hashtable clipStreams = new Hashtable();
- private Vector infos = new Vector();
- private boolean playing = false;
- private Mixer mixer = null;
- public static final AudioDevice device = new AudioDevice();
-
- private AudioDevice() {
- }
-
- private synchronized void startSampled(AudioInputStream var1, InputStream var2) throws UnsupportedAudioFileException, LineUnavailableException {
- Object var3 = null;
- Object var4 = null;
- Object var5 = null;
- Object var6 = null;
- var1 = Toolkit.getPCMConvertedAudioInputStream(var1);
- if (var1 != null) {
- DataLine.Info var10 = new DataLine.Info(SourceDataLine.class, var1.getFormat());
- if (AudioSystem.isLineSupported(var10)) {
- SourceDataLine var11 = (SourceDataLine)AudioSystem.getLine(var10);
- DataPusher var9 = new DataPusher(var11, var1);
- Info var8 = new Info(this, (Sequencer)null, var2, var9);
- this.infos.addElement(var8);
- var9.start();
- }
- }
- }
-
- private synchronized void startMidi(InputStream var1, InputStream var2) throws InvalidMidiDataException, MidiUnavailableException {
- Object var3 = null;
- Object var4 = null;
- Sequencer var7 = MidiSystem.getSequencer();
- var7.open();
-
- try {
- var7.setSequence(var1);
- } catch (IOException var6) {
- throw new InvalidMidiDataException(var6.getMessage());
- }
-
- Info var8 = new Info(this, var7, var2, (DataPusher)null);
- this.infos.addElement(var8);
- var7.addMetaEventListener(var8);
- var7.start();
- }
-
- public synchronized void openChannel(InputStream var1) {
- if (this.DEBUG) {
- System.out.println("AudioDevice: openChannel");
- System.out.println("input stream =" + var1);
- }
-
- Object var2 = null;
-
- for(int var3 = 0; var3 < this.infos.size(); ++var3) {
- Info var21 = (Info)this.infos.elementAt(var3);
- if (var21.in == var1) {
- return;
- }
- }
-
- Object var22 = null;
- if (var1 instanceof AudioStream) {
- if (((AudioStream)var1).midiformat != null) {
- try {
- this.startMidi(((AudioStream)var1).stream, var1);
- } catch (Exception var20) {
- return;
- }
- } else if (((AudioStream)var1).ais != null) {
- try {
- this.startSampled(((AudioStream)var1).ais, var1);
- } catch (Exception var19) {
- return;
- }
- }
- } else if (var1 instanceof AudioDataStream) {
- if (var1 instanceof ContinuousAudioDataStream) {
- try {
- AudioInputStream var4 = new AudioInputStream(var1, ((AudioDataStream)var1).getAudioData().format, -1L);
- this.startSampled(var4, var1);
- } catch (Exception var18) {
- return;
- }
- } else {
- try {
- AudioInputStream var24 = new AudioInputStream(var1, ((AudioDataStream)var1).getAudioData().format, (long)((AudioDataStream)var1).getAudioData().buffer.length);
- this.startSampled(var24, var1);
- } catch (Exception var17) {
- return;
- }
- }
- } else {
- BufferedInputStream var25 = new BufferedInputStream(var1, 1024);
-
- try {
- try {
- var23 = AudioSystem.getAudioInputStream(var25);
- } catch (IOException var14) {
- return;
- }
-
- this.startSampled(var23, var1);
- } catch (UnsupportedAudioFileException var15) {
- try {
- try {
- MidiFileFormat var6 = MidiSystem.getMidiFileFormat(var25);
- } catch (IOException var11) {
- return;
- }
-
- this.startMidi(var25, var1);
- } catch (InvalidMidiDataException var12) {
- AudioFormat var7 = new AudioFormat(Encoding.ULAW, 8000.0F, 8, 1, 1, 8000.0F, true);
-
- try {
- AudioInputStream var8 = new AudioInputStream(var25, var7, -1L);
- this.startSampled(var8, var1);
- } catch (UnsupportedAudioFileException var9) {
- return;
- } catch (LineUnavailableException var10) {
- return;
- }
- } catch (MidiUnavailableException var13) {
- return;
- }
- } catch (LineUnavailableException var16) {
- return;
- }
- }
-
- this.notify();
- }
-
- public synchronized void closeChannel(InputStream var1) {
- if (this.DEBUG) {
- System.out.println("AudioDevice.closeChannel");
- }
-
- if (var1 != null) {
- for(int var3 = 0; var3 < this.infos.size(); ++var3) {
- Info var2 = (Info)this.infos.elementAt(var3);
- if (var2.in == var1) {
- if (var2.sequencer != null) {
- var2.sequencer.stop();
- this.infos.removeElement(var2);
- } else if (var2.datapusher != null) {
- var2.datapusher.stop();
- this.infos.removeElement(var2);
- }
- }
- }
-
- this.notify();
- }
- }
-
- public synchronized void open() {
- }
-
- public synchronized void close() {
- }
-
- public void play() {
- if (this.DEBUG) {
- System.out.println("exiting play()");
- }
-
- }
-
- public synchronized void closeStreams() {
- for(int var2 = 0; var2 < this.infos.size(); ++var2) {
- Info var1 = (Info)this.infos.elementAt(var2);
- if (var1.sequencer != null) {
- var1.sequencer.stop();
- var1.sequencer.close();
- this.infos.removeElement(var1);
- } else if (var1.datapusher != null) {
- var1.datapusher.stop();
- this.infos.removeElement(var1);
- }
- }
-
- if (this.DEBUG) {
- System.err.println("Audio Device: Streams all closed.");
- }
-
- this.clipStreams = new Hashtable();
- this.infos = new Vector();
- }
-
- public int openChannels() {
- return this.infos.size();
- }
-
- void setVerbose(boolean var1) {
- this.DEBUG = var1;
- }
- }
-